#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <conio.h>
using namespace std;
class Ropucha {
private:
    int x;
    int y;
    double energia;
    bool isAlive;
public:
    Ropucha()
    {

    }
    Ropucha(int xp, int yp, double ep, bool isA)
    {
        this->x=xp;
        this->y=yp;
        this->energia=ep;
        this->isAlive=isA;
    }
    int getX()
    {
        return x;
    }
    int getY()
    {
        return y;
    }
    double getE()
    {
        return energia;
    }
    bool getIsAlive()
    {
        return isAlive;
    }
    void setIsAlive(bool cos)
    {
        this->isAlive=cos;
    }
    void krok(char kierunek)
    {
        switch(kierunek)
        {   case 'd': if(this->x-1<0)  break;  this->x-=1; this->energia-=0.2;break;
            case 'a': if(this->x+1>20) break;  this->x+=1; this->energia-=0.2;break;
            case 'w': if(this->y+1>15) break;  this->y+=1; this->energia-=0.2;break;
            case 's': if(this->y-1<0)  break;  this->y-=1; this->energia-=0.2;break;
            default: cout<<"Nie ma takiej opcji!!!\n";
        }
    }
    void skok(char kierunek)
    {
        switch(kierunek)
        {   case 'D': if(this->x-3<0)  break; this->x-=3; this->energia-=1.5;break;
            case 'A': if(this->x+3>20) break; this->x+=3; this->energia-=1.5;break;
            case 'W': if(this->y+3>15) break;this->y+=3; this->energia-=1.5;break;
            case 'S': if(this->y-3<0)  break;this->y-=3; this->energia-=1.5;break;
            default: cout<<"Nie ma takiej opcji!!!\n";
        }
    }
};
void map(Ropucha zielona)
{
    cout<<setw(30);
    cout<<char(218);
    for(int i=20; i>=0; i--)
    cout<<char(196);
    cout<<char(191)<<endl;
    for(int i=15; i>=0; i--)
    {cout<<setw(30);
     cout<<char(179);
     for(int j=20; j>=0; j--)
         if(zielona.getY()==i && zielona.getX()==j){cout<<"R";}else
         cout<<" ";
     cout<<char(179)<<endl;
    }
    cout<<setw(30);
    cout<<char(192);
    for(int i=20; i>=0; i--)
    cout<<char(196);
    cout<<char(217)<< endl;
}
void sterowanie()
{
    system("cls");
    cout<<setw(37)<<"Krok\n";
    cout<<setw(37)<<"Gora - w\n";
    cout<<setw(37)<<"Lewo - a\n";
    cout<<setw(37)<<"Prawo- d\n";
    cout<<setw(38)<<"Dol  - s\n\n";
    cout<<setw(37)<<"Skok\n";
    cout<<setw(37)<<"Gora - W\n";
    cout<<setw(37)<<"Lewo - A\n";
    cout<<setw(37)<<"Prawo- D\n";
    cout<<setw(38)<<"Dol  - S\n\n";
    cout<<setw(42)<<"ESC - wyjscie\n";
    getch();

}
void opcje()
{
    char decyzja=0;
    do
    {
        system("cls");
        cout<<setw(40)<<"Opcje\n";
        cout<<setw(44)<<"1.Sterowanie\n";
        cout<<setw(40)<<"2.Zasady\n";
        cout<<setw(41)<<"3.Autorzy\n";
        cout<<setw(47)<<"Wcisinij esc by wyjsc\n";
        decyzja=getch();
        switch(decyzja)
        {
        case 49: sterowanie();break;
        //case 2: zasady();break;
        //case 3: autorzy();break;
        }
    }while(decyzja!=27);
}
void powitanie(Ropucha zielona);

void gra(Ropucha zielona)
{
    system("cls");
    char kierunek=0;
    bool cos = false;
    do
    {
    kierunek=getch();
    if(kierunek=='o')
    {opcje();}
    else
    {
    if(kierunek>64 && kierunek<90)
    zielona.skok(kierunek);
    else
    zielona.krok(kierunek);}
    system("cls");
    map(zielona);
    cout<<setw(40) << "Energia: " << zielona.getE()<<endl;
    cout<<setw(41) << "Pozycja: (" << zielona.getX() <<","<<zielona.getY()<<")\n";
    if(zielona.getE()<=0)
    {
        zielona.setIsAlive(cos);
    }
    if(!(zielona.getIsAlive()))
    {
        cout<<"Zielona ropucha zginela\n"; kierunek=27;
    }
    }while(!(kierunek==27 || zielona.getIsAlive()==false));
    if(kierunek==27)powitanie(zielona);
}

int main()
{
    Ropucha zielona(0, 0, 100, true);
    powitanie(zielona);
    system("cls");
    cout<<setw(50)<<"Mapa ma rozmiar 20:15!\n\n";
    gra(zielona);
    if(!(zielona.getIsAlive()))
    {
        delete(&zielona);
    }
    system("Pause");
    return 0;
}
void powitanie(Ropucha zielona)
{
    char decyzja=0;
    do
    {
        system("cls");
    cout<<setw(47)<<"Witaj w Grze o Zycie!\n";
    cout<<setw(40)<<"1.Start\n";
    cout<<setw(40)<<"2.Opcje\n";
    cout<<setw(47)<<"Wcisinij ESC by wyjsc\n";
    decyzja=getch();
    switch(decyzja)
    {
    case 27: exit(1);
    case 49: gra(zielona); break;
    case 50: opcje();break;
    }
    }while(decyzja!=1);
}
